package org.base23.video.domain.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 智能播放响应DTO
 * 包含播放控制的完整信息
 */
@Data
public class SmartPlaybackResponse {

    /**
     * 分析结果ID
     */
    private String resultId;

    /**
     * 视频总时长（秒）
     */
    private Double totalDuration;

    /**
     * 播放指令列表
     */
    private List<PlaybackInstruction> instructions;

    /**
     * 关键分析点
     */
    private List<AnalysisPoint> analysisPoints;

    /**
     * 视频片段信息
     */
    private List<VideoSegment> segments;

    /**
     * 播放配置
     */
    private PlaybackConfig config;

    /**
     * 统计信息
     */
    private PlaybackStatistics statistics;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

    /**
     * 关键分析点
     */
    @Data
    public static class AnalysisPoint {
        /**
         * 时间点（秒）
         */
        private Double timestamp;

        /**
         * 分析点标题
         */
        private String title;

        /**
         * 分析内容
         */
        private String content;

        /**
         * 重要程度（1-5）
         */
        private Integer importance;

        /**
         * 分析类型
         */
        private String type;

        /**
         * 相关身体部位
         */
        private String bodyPart;

        /**
         * 建议
         */
        private String suggestion;
    }

    /**
     * 视频片段
     */
    @Data
    public static class VideoSegment {
        /**
         * 片段开始时间（秒）
         */
        private Double startTime;

        /**
         * 片段结束时间（秒）
         */
        private Double endTime;

        /**
         * 片段标题
         */
        private String title;

        /**
         * 片段描述
         */
        private String description;

        /**
         * 片段类型
         */
        private String type;

        /**
         * 推荐播放速度
         */
        private Double recommendedSpeed;

        /**
         * 是否为关键片段
         */
        private Boolean isKeySegment;

        /**
         * 片段标签
         */
        private String[] tags;
    }

    /**
     * 播放配置
     */
    @Data
    public static class PlaybackConfig {
        /**
         * 默认播放速度
         */
        private Double defaultSpeed;

        /**
         * 是否启用自动播放控制
         */
        private Boolean autoPlayControl;

        /**
         * 是否显示分析提示
         */
        private Boolean showAnalysisTips;

        /**
         * 是否启用智能暂停
         */
        private Boolean smartPause;

        /**
         * 语言设置
         */
        private String language;

        /**
         * 自定义设置
         */
        private Map<String, Object> customSettings;
    }

    /**
     * 播放统计信息
     */
    @Data
    public static class PlaybackStatistics {
        /**
         * 总指令数量
         */
        private Integer totalInstructions;

        /**
         * 暂停指令数量
         */
        private Integer pauseInstructions;

        /**
         * 慢放指令数量
         */
        private Integer slowMotionInstructions;

        /**
         * 高亮片段数量
         */
        private Integer highlightSegments;

        /**
         * 讲解内容数量
         */
        private Integer explanations;

        /**
         * 关键分析点数量
         */
        private Integer keyAnalysisPoints;

        /**
         * 平均指令间隔（秒）
         */
        private Double averageInstructionInterval;

        /**
         * 建议观看时长（秒）
         */
        private Double recommendedViewingDuration;
    }

    /**
     * 创建默认响应
     */
    public static SmartPlaybackResponse createDefault(String resultId) {
        SmartPlaybackResponse response = new SmartPlaybackResponse();
        response.setResultId(resultId);
        response.setCreateTime(LocalDateTime.now());
        
        // 设置默认配置
        PlaybackConfig config = new PlaybackConfig();
        config.setDefaultSpeed(1.0);
        config.setAutoPlayControl(true);
        config.setShowAnalysisTips(true);
        config.setSmartPause(true);
        config.setLanguage("zh_CN");
        response.setConfig(config);
        
        return response;
    }

    /**
     * 创建空统计信息
     */
    public static PlaybackStatistics createEmptyStatistics() {
        PlaybackStatistics stats = new PlaybackStatistics();
        stats.setTotalInstructions(0);
        stats.setPauseInstructions(0);
        stats.setSlowMotionInstructions(0);
        stats.setHighlightSegments(0);
        stats.setExplanations(0);
        stats.setKeyAnalysisPoints(0);
        stats.setAverageInstructionInterval(0.0);
        stats.setRecommendedViewingDuration(0.0);
        return stats;
    }
} 